package alternativa.gui.theme.defaulttheme.container.panel {

	import alternativa.gui.alternativagui;
	import alternativa.gui.base.GUIobject;
	import alternativa.gui.controls.button.BaseButton;
	import alternativa.gui.layout.LayoutManager;
	import alternativa.gui.primitives.stretch.HorizontalBar;
	import alternativa.gui.theme.defaulttheme.controls.text.LabelWithIcon;
	import alternativa.gui.theme.defaulttheme.event.PanelEvent;
	import alternativa.gui.theme.defaulttheme.primitives.panel.BackgroundPanel;
	import alternativa.gui.theme.defaulttheme.skin.NumericConst;
	import alternativa.gui.theme.defaulttheme.skin.PanelSkin;
	
	import flash.display.Bitmap;
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	use namespace alternativagui;

	/**
	 * 
	 * RU: Панель с заголовком, с кнопкой "закрыть панель", горизонтальной линией разделяющая заголовок и контент. 
	 * С возможностью перетаскивания (drag&drop) за заголовок.
     * EN: panel, which contains: title, button "close", horizontal line separated title and content
	 * 
	 */	
	public class EditorPanel extends Panel{
		// RU: область, за которую можно хвататься
        // EN: Drag area		//fixed UI里不需要相应dragArea
		protected var dragArea:Sprite;

		public function EditorPanel() {
			super();
			// RU: область за которую хватаются при перетаскивании
            // EN: create drag area	//fixed
			dragArea = new Sprite();
			dragArea.tabEnabled = false;
			dragArea.mouseChildren = false;
			dragArea.graphics.beginFill(0xFF0000, 0);
			dragArea.graphics.drawRect(0, 0, 10, 10);
			addChild(dragArea);
		}

		// RU: позиционирование и установка размеров
        // EN: set position and sizes
		override protected function draw():void {
			super.draw();
			dragArea.width = _width;
			dragArea.height = titleHeight;
		}

		// RU: при нажатии на dragArea активируем перетаскивание. При перемещении панель занимает самый верхний уровень видимости в главном контейнере.
        // EN: activate the drag when you click on dragArea. Panel goes onTop (visible layer) in the main container on dragging
		private function dragArea_mouseDownHandler(event:MouseEvent):void {
			this.startDrag();
			if (parent != null) {
				if (parent.getChildIndex(this) != (parent.numChildren - 1)) {
					parent.swapChildrenAt((parent.numChildren - 1), parent.getChildIndex(this));
				}
			}

			LayoutManager.stage.addEventListener(MouseEvent.MOUSE_UP, dragArea_mouseUpHandler);
			dispatchEvent(new PanelEvent(PanelEvent.MOUSE_DOWN));
		}

		private function dragArea_mouseUpHandler(event:MouseEvent):void {
			this.stopDrag();

			LayoutManager.stage.removeEventListener(MouseEvent.MOUSE_UP, dragArea_mouseUpHandler);
			dispatchEvent(new PanelEvent(PanelEvent.MOUSE_UP));
		}

		override public function get dragEnabled():Boolean {
			return _dragEnabled;
		}

		override public function set dragEnabled(value:Boolean):void {
			_dragEnabled = value;
			if (_dragEnabled) {
				if (!dragArea.hasEventListener(MouseEvent.MOUSE_DOWN)) {
					dragArea.addEventListener(MouseEvent.MOUSE_DOWN, dragArea_mouseDownHandler);
				}
			} else {
				dragArea.removeEventListener(MouseEvent.MOUSE_DOWN, dragArea_mouseDownHandler);
			}
		}
	}
}

